# -*- coding: utf-8 -*-

from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth.decorators import login_required, permission_required
from django.http import HttpResponse

from financeiro.models import *
from venda.models import Pedido, Caixa
from cliente.models import Cliente
from registro.models import Evento
from django.utils import simplejson

import impressao.views

import datetime
from django.shortcuts import render_to_response
from django.template.context import RequestContext
from django.http.response import HttpResponseRedirect



def imprimir_compra_parcelada(compra_parcelada_id, vias = 1):
    compra_parcelada = Compra_parcelada.objects.get(id = compra_parcelada_id)
    
    pagamentos_receber = Pagamento_receber.objects.filter(compra_parcelada = compra_parcelada)
    
    saida = "Crediario" + '\n'
    saida += unicode(compra_parcelada.venda) + '\n'
    saida += unicode(compra_parcelada.cliente)+ '\n'
    saida += ('R$ %.2f' % compra_parcelada.valor_total).replace('.', ',') + u' dividido em ' + unicode(compra_parcelada.parcelas) + u' parcela(s)' + '\n'
    saida += '-' * compra_parcelada.venda.caixa.guiche.impressora.colunas+ '\n'
    
    i = 0
    for pagamento in pagamentos_receber:
        i += 1
        saida += unicode('Pgto. %.2d' % i) + (': R$ %.2f' % pagamento.valor).replace('.', ',') + '. Vencimento p/ ' + unicode(pagamento.vencimento) + '\n'
    
    i = 0
    while i < vias:
        print saida
        impressao.views.imprime_caixa(saida, compra_parcelada.venda.caixa.guiche.impressora)
        i += 1

@csrf_exempt
@login_required
def parcelar(request):
    if request.is_ajax():
        format = 'json'
        mimetype = 'application/json'
        
        if request.POST.has_key('pedido_id') and request.POST.has_key('cliente_id') and request.POST.has_key('parcelas') and request.POST.has_key('vencimento') and request.POST.has_key('valor_total'):
            pedido_id = int(request.POST['pedido_id'])
            cliente_id = int(request.POST['cliente_id'])
            parcelas = int(request.POST['parcelas'])
            vencimento = int(request.POST['vencimento'])
            valor_total = float(request.POST['valor_total'].replace(',', '.'))
            
            venda = Pedido.objects.get(id = pedido_id)
            cliente = Cliente.objects.get(id = cliente_id)
            
            compra_parcelada = Compra_parcelada(venda = venda, cliente = cliente, parcelas = parcelas, vencimento = vencimento, valor_total = valor_total)
            compra_parcelada.save()
            
            valor = float(valor_total) / float(parcelas)
            
            import datetime
            
            hoje = datetime.date.today()
            
            d_vencimento = hoje
            d_vencimento = d_vencimento.replace(day = vencimento)
            for i in range(1, parcelas+1):
                
                if d_vencimento.month < 12:
                    d_vencimento = d_vencimento.replace(month = d_vencimento.month + 1)
                else:
                    d_vencimento = d_vencimento.replace(year = d_vencimento.year + 1, month = 1)
                    
                Pagamento_receber(compra_parcelada = compra_parcelada, valor = valor, vencimento = d_vencimento, parcela = i).save()
            
            dados = simplejson.dumps({'saida': True})
        
        # imprimir_compra_parcelada(compra_parcelada.id, 0)
        return HttpResponse(dados, mimetype)
    else:
        return HttpResponse(None)

@login_required
def contas_parcelas(request):
    compras = Compra_parcelada.objects.filter(concluido = None).order_by('-venda__aberto')
    
    mensagem = False
    aviso = False
    if request.session.has_key('mensagem'):
        mensagem = request.session['mensagem']
        del request.session['mensagem']
    if request.session.has_key('aviso'):
        aviso = request.session['aviso']
        del request.session['aviso']
    
    js = 'financeiro/contas_receber'
    css = 'financeiro/contas_receber'
    return render_to_response(
        'financeiro/contas_parcelas.html', locals(),
        context_instance=RequestContext(request)
    )
    
def some_view(request, compra, pagamentos):
    from configuracao.models import Dados
    dados = Dados.objects.all()[0]
    
    import reportlab
    from reportlab.pdfgen import canvas
    from reportlab.lib.pagesizes import A4
    from reportlab.lib.units import cm
    
    from PIL import Image
    
    import urllib2
    from StringIO import StringIO
    from django.contrib.sites.models import get_current_site

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type = 'application/pdf')
    response['Content-Disposition'] = 'attachment; filename="%.10d.pdf"' % compra.id
    # logoRGB = Image.open('/static/img/logo-crediario.png')
    logoRGB = Image.open(StringIO(urllib2.urlopen(urllib2.Request('http://' + get_current_site(request).domain + '/static/img/logo-crediario.png')).read()))
    logo = logoRGB.convert('L')
    
    # marca_dagua = Image.open('/static/img/bg-crediario.jpg')
    #marca_dagua = Image.open(StringIO(urllib2.urlopen(urllib2.Request('http://' + get_current_site(request).domain + '/static/img/bg-crediario.jpg')).read()))
    #marca_dagua = marca_dagua.convert('L')
    
    # Create the PDF object, using the response object as its "file."
    c = canvas.Canvas(response)
    c.setAuthor(u'Joseph Soares Alcântara')
    c.setTitle(u'CtrlSys Comercial')
    c.setSubject(u'Crediário')
    
    # x, y = 1.5, 1.5 cm
    c.translate(0, A4[1])
    
    i = 0
    linha = 10
    
    for pagamento in pagamentos:
        nLinha = 0
        c.setStrokeGray(0.75)
        c.translate(0, -7.4 * cm)
        c.rect(0, 0, 1 * cm, 7.4 * cm)
        c.rect(1 * cm, 0, 8 * cm, 7.4 * cm)
        
        #c.drawInlineImage(marca_dagua, 1 * cm, 0, 8 * cm, 6 * cm)
        
        x, y = 1.25 * cm, 6.9 * cm
        # Draw things on the PDF. Here's where the PDF generation happens.
        # See the ReportLab documentation for the full list of functionality.
        c.setFont("Helvetica-Bold", linha)
        c.drawString(x, y - linha*nLinha, dados.nome)
        c.setFont("Helvetica", linha)
        nLinha += 1
        c.drawString(x, y - linha*nLinha, dados.endereco)
        nLinha += 1
        if dados.endereco_complemento and dados.endereco_complemento != '':
            c.drawString(x, y - linha*nLinha, dados.endereco_complemento)
        
        nLinha += 1
        if dados.telefone1 and dados.telefone1 != '':
            c.drawString(x, y - linha*nLinha, dados.telefone1)
        
        c.drawInlineImage(logo, x + 5.75 * cm, y - 10, 50, 18)
        
        nLinha += 2
        c.drawString(x, y - linha*nLinha, compra.cliente.nome)
        nLinha += 1
        c.drawString(x, y - linha*nLinha, 'Vencimento: ' + pagamento.vencimento.strftime('%d/%m/%Y'))
        nLinha += 1
        c.drawString(x, y - linha*nLinha, 'Parcela %.2d de %.2d' % (pagamento.parcela, compra.parcelas))
        nLinha += 1
        c.drawString(x, y - linha*nLinha, ('Valor: R$ %.2f' % (pagamento.valor)).replace(".", ","))
        nLinha += 2
        c.drawString(x, y - linha*nLinha, 'Venda: %d' % (compra.venda.id))
        nLinha += 1
        c.drawString(x, y - linha*nLinha, 'Cód.: %d' % (pagamento.id))
        
        nLinha += 3
        if pagamento.pago_em != None:
            c.drawString(x, y - linha*nLinha, 'Pago em : ' + pagamento.pago_em.strftime('%d/%m/%Y'))
        else:
            c.drawString(x, y - linha*nLinha, 'Pago em : ' + '____/____/________')
        c.setStrokeGray(0)
        nLinha += 3
        c.line(x, y - linha*nLinha, x + 7.5 * cm, y - linha*nLinha)
        c.setFontSize(8)
        c.setFont("Helvetica-Oblique", 8)
        nLinha += 1
        c.drawString(x + 3 * cm, y - linha*nLinha, 'Assinatura')
        
        c.setStrokeGray(0.75)
        c.rect(9 * cm, 0, 8 * cm, 7.4 * cm)
        
        #c.drawInlineImage(marca_dagua, 9 * cm, 0, 8 * cm, 6 * cm)
        
        x += (8*cm)
        nLinha = 0
        
        c.setFont("Helvetica-Bold", linha)
        c.drawString(x, y - linha*nLinha, dados.nome)
        c.setFont("Helvetica", linha)
        nLinha += 1
        c.drawString(x, y - linha*nLinha, dados.endereco)
        nLinha += 1
        if dados.endereco_complemento and dados.endereco_complemento != '':
            c.drawString(x, y - linha*nLinha, dados.endereco_complemento)
        
        nLinha += 1
        if dados.telefone1 and dados.telefone1 != '':
            c.drawString(x, y - linha*nLinha, dados.telefone1)
        
        c.drawInlineImage(logo, x + 5.75 * cm, y - 10, 50, 18)
        
        nLinha += 2
        c.drawString(x, y - linha*nLinha, compra.cliente.nome)
        nLinha += 1
        c.drawString(x, y - linha*nLinha, 'Vencimento: ' + pagamento.vencimento.strftime('%d/%m/%Y'))
        nLinha += 1
        c.drawString(x, y - linha*nLinha, 'Parcela %.2d de %.2d' % (pagamento.parcela, compra.parcelas))
        nLinha += 1
        c.drawString(x, y - linha*nLinha, ('Valor: R$ %.2f' % (pagamento.valor)).replace(".", ","))
        nLinha += 2
        c.drawString(x, y - linha*nLinha, 'Venda: %d' % (compra.venda.id))
        nLinha += 1
        c.drawString(x, y - linha*nLinha, 'Cód.: %d' % (pagamento.id))
        
        nLinha += 3
        if pagamento.pago_em != None:
            c.drawString(x, y - linha*nLinha, 'Pago em : ' + pagamento.pago_em.strftime('%d/%m/%Y'))
        else:
            c.drawString(x, y - linha*nLinha, 'Pago em : ' + '____/____/________')
        c.setStrokeGray(0)
        nLinha += 3
        c.line(x, y - linha*nLinha, x + 7.5 * cm, y - linha*nLinha)
        c.setFontSize(8)
        c.setFont("Helvetica-Oblique", 8)
        nLinha += 1
        c.drawString(x + 3 * cm, y - linha*nLinha, 'Assinatura')
        
        i += 1
        
        if i % 4 == 0 and i < compra.parcelas:
            c.showPage()
            
            # x, y = 1.5, 1.5 cm
            c.translate(0, A4[1])
    
    # Close the PDF object cleanly, and we're done.
    #c.showPage()
    c.save()
    return response

def some_view_(request, compra, pagamentos):
    from configuracao.models import Dados
    dados = Dados.objects.all()[0]
    
    import reportlab
    from reportlab.pdfgen import canvas
    from reportlab.lib.pagesizes import A4
    from reportlab.lib.units import cm
    
    from PIL import Image
    
    import urllib2
    from StringIO import StringIO
    from django.contrib.sites.models import get_current_site

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type = 'application/pdf')
    response['Content-Disposition'] = 'attachment; filename="%.10d.pdf"' % compra.id
    # logoRGB = Image.open('/static/img/logo-crediario.png')
    logoRGB = Image.open(StringIO(urllib2.urlopen(urllib2.Request('http://' + get_current_site(request).domain + '/static/img/logo-crediario.png')).read()))
    logo = logoRGB.convert('L')
    
    # marca_dagua = Image.open('/static/img/bg-crediario.jpg')
    marca_dagua = Image.open(StringIO(urllib2.urlopen(urllib2.Request('http://' + get_current_site(request).domain + '/static/img/bg-crediario.jpg')).read()))
    marca_dagua = marca_dagua.convert('L')
    
    # Create the PDF object, using the response object as its "file."
    c = canvas.Canvas(response)
    c.setAuthor(u'Joseph Soares Alcântara')
    c.setTitle(u'CtrlSys Comercial')
    c.setSubject(u'Crediário')
    
    # x, y = 1.5, 1.5 cm
    c.translate(1.5 * cm, A4[1] - 1.5 * cm)
    
    i = 0
    for pagamento in pagamentos:
        c.setStrokeGray(0.75)
        c.translate(0, -6 * cm)
        c.rect(0, 0, 2 * cm, 6 * cm)
        c.rect(2 * cm, 0, 8 * cm, 6 * cm)
        
        c.drawInlineImage(marca_dagua, 2 * cm, 0, 8 * cm, 6 * cm)
        
        # Draw things on the PDF. Here's where the PDF generation happens.
        # See the ReportLab documentation for the full list of functionality.
        c.setFont("Helvetica-Bold", 10)
        c.drawString(2.25 * cm, 5.5 * cm, dados.nome)
        c.setFont("Helvetica", 10)
        c.drawString(2.25 * cm, 5.5 * cm - 10, dados.endereco)
        if dados.telefone1 and dados.telefone1 != '':
            c.drawString(2.25 * cm, 5.5 * cm - 20, dados.telefone1)
        c.drawInlineImage(logo, 2.25 * cm + 5.75 * cm, 5.5 * cm - 10, 50, 18)
        c.drawString(2.25 * cm, 5.5 * cm - 40, 'Venda: %.10d' % (compra.venda.id))
        c.drawString(2.25 * cm, 5.5 * cm - 50, compra.cliente.nome)
        if pagamento.pago_em == None:
            c.setFont("Helvetica-Bold", 10)
        c.drawString(2.25 * cm, 5.5 * cm - 70, '%.10d - P. %.2d de %.2d: R$ %4.2f' % (pagamento.id, pagamento.parcela, compra.parcelas, pagamento.valor))
        c.setFont("Helvetica", 10)
        c.drawString(2.25 * cm, 5.5 * cm - 80, 'Vencimento: ' + pagamento.vencimento.strftime('%d/%m/%Y'))
        if pagamento.pago_em != None:
            c.drawString(2.25 * cm, 5.5 * cm - 100, 'Pago em : ' + pagamento.pago_em.strftime('%d/%m/%Y'))
        else:
            c.drawString(2.25 * cm, 5.5 * cm - 100, 'Pago em : ' + '____/____/________')
        c.setStrokeGray(0)
        c.line(2.25 * cm, 5.5 * cm - 130, 2.25 * cm + 7.5 * cm, 5.5 * cm - 130)
        c.setFontSize(8)
        c.setFont("Helvetica-Oblique", 8)
        c.drawString(2.25 * cm + 3 * cm, 5.5 * cm - 140, 'Assinatura')
        
        c.setStrokeGray(0.75)
        c.rect(10 * cm, 0, 8 * cm, 6 * cm)
        
        c.drawInlineImage(marca_dagua, 10 * cm, 0, 8 * cm, 6 * cm)
        
        c.setFont("Helvetica-Bold", 10)
        c.drawString(2.25 * cm + 8 * cm, 5.5 * cm, dados.nome)
        c.setFont("Helvetica", 10)
        c.drawString(2.25 * cm + 8 * cm, 5.5 * cm - 10, dados.endereco)
        if dados.telefone1 and dados.telefone1 != '':
            c.drawString(2.25 * cm + 8 * cm, 5.5 * cm - 20, dados.telefone1)
        c.drawInlineImage(logo, 2.25 * cm + 5.75 * cm + 8 * cm, 5.5 * cm - 10, 50, 18)
        c.drawString(2.25 * cm + 8 * cm, 5.5 * cm - 40, 'Venda: %.10d' % (compra.venda.id))
        c.drawString(2.25 * cm + 8 * cm, 5.5 * cm - 50, compra.cliente.nome)
        if pagamento.pago_em == None:
            c.setFont("Helvetica-Bold", 10)
        c.drawString(2.25 * cm + 8 * cm, 5.5 * cm - 70, '%.10d - P. %.2d de %.2d: R$ %4.2f' % (pagamento.id, pagamento.parcela, compra.parcelas, pagamento.valor))
        c.setFont("Helvetica", 10)
        c.drawString(2.25 * cm + 8 * cm, 5.5 * cm - 80, 'Vencimento: ' + pagamento.vencimento.strftime('%d/%m/%Y'))
        if pagamento.pago_em != None:
            c.drawString(2.25 * cm + 8 * cm, 5.5 * cm - 100, 'Pago em : ' + pagamento.pago_em.strftime('%d/%m/%Y'))
        else:
            c.drawString(2.25 * cm + 8 * cm, 5.5 * cm - 100, 'Pago em : ' + '____/____/________')
        c.setStrokeGray(0)
        c.line(2.25 * cm + 8 * cm, 5.5 * cm - 130, 2.25 * cm + 8 * cm + 7.5 * cm, 5.5 * cm - 130)
        c.setFontSize(8)
        c.setFont("Helvetica-Oblique", 8)
        c.drawString(2.25 * cm + 8 * cm + 3 * cm, 5.5 * cm - 140, 'Assinatura')
        
        i += 1
        
        if i % 4 == 0 and i < compra.parcelas:
            c.showPage()
            
            # x, y = 1.5, 1.5 cm
            c.translate(1.5 * cm, A4[1] - 1.5 * cm)
    
    # Close the PDF object cleanly, and we're done.
    #c.showPage()
    c.save()
    return response

@login_required
def contas_parcelas_exibir(request, compra_id):
    if Compra_parcelada.objects.filter(id = compra_id).count() > 0:
        compra = Compra_parcelada.objects.get(id = compra_id)
        pagamentos = Pagamento_receber.objects.filter(compra_parcelada = compra)
        
        mensagem = False
        aviso = False
        if request.session.has_key('mensagem'):
            mensagem = request.session['mensagem']
            del request.session['mensagem']
        if request.session.has_key('aviso'):
            aviso = request.session['aviso']
            del request.session['aviso']
        
        js = 'financeiro/contas_receber'
        css = 'financeiro/contas_receber'
        
        return some_view(request, compra, pagamentos)
        
        return render_to_response(
            'financeiro/contas_parcelas_exibir.html', locals(),
            context_instance=RequestContext(request)
        )
    else:
        request.session['aviso'] = 'Compra não existe'
        return HttpResponseRedirect('/financeiro/contas/parcelas/')

@csrf_exempt
@login_required
def contas_receber(request):
    '''
    Vermelho - Conta em atraso
    Preto - Contas a receber não vencidas
    Azul- Contas a receber no dia
    Verde - Contas pagas
    '''
    
    if Caixa.objects.filter(operador = request.user, fechado = None).count() == 0:
        request.session['aviso'] = 'Não há caixa aberto'
        return HttpResponseRedirect("../../../")
    
    hoje = datetime.date.today()
    
    pagamento_receber = Pagamento_receber.objects.filter(pago_em = None).order_by('vencimento')
    for pagamento in pagamento_receber:
        
        if pagamento.vencimento < hoje:
            pagamento.cor = "red"
        elif pagamento.vencimento == hoje:
            pagamento.cor = 'blue'
        else:
            pagamento.cor = 'black'
    
    mensagem = False
    aviso = False
    if request.session.has_key('mensagem'):
        mensagem = request.session['mensagem']
        del request.session['mensagem']
    if request.session.has_key('aviso'):
        aviso = request.session['aviso']
        del request.session['aviso']
    
    js = 'financeiro/contas_receber'
    css = 'financeiro/contas_receber'
    return render_to_response(
        'financeiro/contas_receber.html', locals(),
        context_instance=RequestContext(request)
    )

@login_required
#@permission_required('venda.delete_item')
@csrf_exempt
def contas_receber_pagar(request, pagamento_id):
    if Pagamento_receber.objects.filter(id = pagamento_id).count() > 0:
        pagamento = Pagamento_receber.objects.get(id = pagamento_id)
        
        if Caixa.objects.filter(operador = request.user, fechado = None).count() > 0:
            caixa = Caixa.objects.get(operador = request.user, fechado = None)
        else:
            request.session['aviso'] = 'Para realizar esta operação é preciso abrir o seu caixa'
            return HttpResponseRedirect('/venda/')
        
        if request.POST.has_key('valor') and request.POST['valor'] != '':
            valor_pago = float(request.POST['valor'].strip().replace(',', '.'))
            if round(valor_pago, 2) >= round(float(pagamento.valor), 2):
                troco = round(valor_pago, 2) - round(float(pagamento.valor), 2)
        
        header = "Pagamento"
        css = "venda/pagamento"
        js = "venda/pagamento"
        
        mensagem = False
        aviso = False
        if request.session.has_key('mensagem'):
            mensagem = request.session['mensagem']
            del request.session['mensagem']
        if request.session.has_key('aviso'):
            aviso = request.session['aviso']
            del request.session['aviso']
        
        return render_to_response(
            'financeiro/contas_receber_pagar.html', locals(),
            context_instance=RequestContext(request)
        )
        
    else:
        return HttpResponseRedirect('/venda/')

@login_required
@csrf_exempt
def contas_receber_pagar_finalizar(request):
    if request.method == 'POST' and request.POST.has_key('pagamento_id') and request.POST.has_key('valor_pago') and Pagamento_receber.objects.filter(id = int(request.POST['pagamento_id'])).count() > 0:
        pagamento = Pagamento_receber.objects.get(id = int(request.POST['pagamento_id']))
        valor_pago = float(request.POST['valor_pago'].strip().replace(',', '.'))
        
        if Caixa.objects.filter(operador = request.user, fechado = None).count() > 0:
            caixa = Caixa.objects.get(operador = request.user, fechado = None)
            
            caixa.dinheiro = float(caixa.dinheiro) + float(pagamento.valor)
            caixa.recebimento = float(caixa.recebimento) + float(pagamento.valor)
            caixa.save()
            
            pagamento.pago_em = datetime.datetime.today()
            pagamento.save()
            
            Evento(usuario = request.user, pedido = None, descricao = u"Pagamento recebido. valor: R$ " + str(pagamento.valor)).save()
        
            if request.POST.has_key('imprimir') and request.POST['imprimir'] == '1':
                saida = datetime.datetime.now().strftime('%d/%m/%Y - %H:%M:%S') + ' - ' + (str(pagamento.compra_parcelada.venda.id).zfill(10) + ' - Caixa: '+ str(caixa.guiche.numero)).ljust(caixa.guiche.impressora.colunas) + '\n'
                saida += ('Operador: ' + caixa.operador.first_name + ' ' + caixa.operador.last_name).ljust(caixa.guiche.impressora.colunas) + '\n'
                saida += '-'* caixa.guiche.impressora.colunas + '\n'
                saida += pagamento.compra_parcelada.cliente.nome + '\n'
                saida += ("Parcela %.2d/%.2d" % (int(pagamento.parcela), int(pagamento.compra_parcelada.parcelas))).ljust(13) + ('Vencimento: ' + (pagamento.vencimento).strftime('%d/%m/%Y')).rjust(caixa.guiche.impressora.colunas - 13) + '\n'
                saida += 'Valor:'.ljust(36) + 'R$'.ljust(3) + ('%.2f' % pagamento.valor).replace('.', ',').rjust(caixa.guiche.impressora.colunas - 39) + '\n'
                saida += 'Valor pago:'.ljust(36) + 'R$'.ljust(3) + ('%.2f' % valor_pago).replace('.', ',').rjust(caixa.guiche.impressora.colunas - 39) + '\n'
                saida += 'Troco:'.ljust(36) + 'R$'.ljust(3) + ('%.2f' % (float(valor_pago) - float(pagamento.valor))).replace('.', ',').rjust(caixa.guiche.impressora.colunas - 39)
                
                impressao.views.imprime_caixa(
                    saida,
                    caixa.guiche.impressora
                )
            
            request.session['mensagem'] = 'Pagamento recebido'
            return HttpResponseRedirect('/venda/')
            
        else:
            request.session['aviso'] = 'Para realizar esta operação é preciso abrir o seu caixa'
            return HttpResponseRedirect('/venda/')
        
    else:
        return HttpResponseRedirect('/')

@csrf_exempt
@login_required
def cheque(request):
    if request.is_ajax():
        format = 'json'
        mimetype = 'application/json'
        
        if request.POST.has_key('pedido_id') and request.POST.has_key('cliente_id') and request.POST.has_key('vencimento') and request.POST.has_key('valor_total') and request.POST.has_key('recebido'):
            pedido_id = int(request.POST['pedido_id'])
            cliente_id = int(request.POST['cliente_id'])
            vencimento = request.POST['vencimento']
            valor_total = float(request.POST['valor_total'].replace(',', '.'))
            recebido = int(request.POST['recebido'])
            
            venda = Pedido.objects.get(id = pedido_id)
            cliente = Cliente.objects.get(id = cliente_id)
            
            import datetime
            if recebido == 1:
                concluido = vencimento = datetime.date.today()
            else:
                vencimento = map(int, vencimento.split('/'))
                vencimento = datetime.date(year = vencimento[2], month = vencimento[1], day = vencimento[0])
                concluido = None
            
            # mudar
            cheque = Cheque(venda = venda, cliente = cliente, vencimento = vencimento, valor_total = valor_total, concluido = concluido)
            cheque.save()
            
            Evento(usuario = request.user, pedido = None, descricao = u"Cheque adicionado. valor: R$ " + str(cheque.valor_total)).save()
            
            dados = simplejson.dumps({'saida': True})
        
        return HttpResponse(dados, mimetype)
    else:
        return HttpResponse(None)

@csrf_exempt
@login_required
def cheque_receber(request):
    '''
    Vermelho - Conta em atraso
    Preto - Contas a receber não vencidas
    Azul- Contas a receber no dia
    Verde - Contas pagas
    '''
    if Caixa.objects.filter(operador = request.user, fechado = None).count() == 0:
        request.session['aviso'] = 'Não há caixa aberto'
        return HttpResponseRedirect("../../../")
    
    hoje = datetime.date.today()
    
    cheques = Cheque.objects.filter(concluido = None).order_by('vencimento')
    for cheque in cheques:
        
        if cheque.vencimento < hoje:
            cheque.cor = "red"
        elif cheque.vencimento == hoje:
            cheque.cor = 'blue'
        else:
            cheque.cor = 'black'
    
    mensagem = False
    aviso = False
    if request.session.has_key('mensagem'):
        mensagem = request.session['mensagem']
        del request.session['mensagem']
    if request.session.has_key('aviso'):
        aviso = request.session['aviso']
        del request.session['aviso']
    
    header = titulo = 'Cheques a receber'
    js = 'financeiro/contas_receber'
    css = 'financeiro/contas_receber'
    return render_to_response(
        'financeiro/cheque_receber.html', locals(),
        context_instance=RequestContext(request)
    )

@login_required
#@permission_required('venda.delete_item')
@csrf_exempt
def cheque_receber_pagar(request, cheque_id):
    if Cheque.objects.filter(id = cheque_id).count() > 0:
        cheque = Cheque.objects.get(id = cheque_id)
        
        if Caixa.objects.filter(operador = request.user, fechado = None).count() > 0:
            caixa = Caixa.objects.get(operador = request.user, fechado = None)
            
            caixa.cheque = float(caixa.cheque) + float(cheque.valor_total)
            caixa.save()
        
            cheque.concluido = datetime.date.today()
            cheque.save()
            
            Evento(usuario = request.user, pedido = None, descricao = u"Cheque recebido. valor: R$ " + str(cheque.valor_total)).save()
            
            request.session['mensagem'] = 'Cheque marcado como recebido. <a href="/financeiro/cheque/desfazer/' + str(cheque.id) + '/">Desfazer</a>'
            return HttpResponseRedirect('/venda/')
            
        else:
            request.session['aviso'] = 'Para realizar esta operação é preciso abrir o seu caixa'
            return HttpResponseRedirect('/venda/')
    else:
        return HttpResponseRedirect('/venda/')

@login_required
#@permission_required('venda.delete_item')
@csrf_exempt
def cheque_desfazer(request, cheque_id):
    if Cheque.objects.filter(id = cheque_id).count() > 0:
        cheque = Cheque.objects.get(id = cheque_id)
        if cheque.concluido != None:
        
            if Caixa.objects.filter(operador = request.user, fechado = None).count() > 0:
                caixa = Caixa.objects.get(operador = request.user, fechado = None)
                
                caixa.cheque = float(caixa.cheque) - float(cheque.valor_total)
                caixa.save()
            
                cheque.concluido = None
                cheque.save()
                
                Evento(usuario = request.user, pedido = None, descricao = u"Desfeito Cheque recebido. valor: R$ " + str(cheque.valor_total)).save()
                
                request.session['mensagem'] = 'Cheque marcado como recebido desfeito.'
                return HttpResponseRedirect('/financeiro/cheque/receber/')
                
            else:
                request.session['aviso'] = 'Para realizar esta operação é preciso abrir o seu caixa'
                return HttpResponseRedirect('/venda/')
        else:
            request.session['aviso'] = 'Ação já realizada antes.'
            return HttpResponseRedirect('/venda/')
    else:
        return HttpResponseRedirect('/venda/')
